package top.tagao.m03_beHavioralPatterns.b_11_Iterator;

import top.tagao.m03_beHavioralPatterns.b_11_Iterator.college.College;
import top.tagao.m03_beHavioralPatterns.b_11_Iterator.college.ComputerCollege;
import top.tagao.m03_beHavioralPatterns.b_11_Iterator.college.InfoCollege;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author Viktor_Liu
 * @Date 2022/8/14 19:25
 * 1. 迭代器（Iterator）接口声明了遍历集合所需的操作：获取下
 * 一个元素、获取当前位置和重新开始迭代等。
 *
 * 2. 具体迭代器（Concrete Iterators）实现遍历集合的一种特定
 * 算法。迭代器对象必须跟踪自身遍历的进度。这使得多个迭
 * 代器可以相互独立地遍历同一集合。
 *
 * 3. 集合（Collection）接口声明一个或多个方法来获取与集合兼
 * 容的迭代器。请注意，返回方法的类型必须被声明为迭代器
 * 接口，因此具体集合可以返回各种不同种类的迭代器。
 *
 * 4. 具体集合（Concrete Collections）会在客户端请求迭代器时
 * 返回一个特定的具体迭代器类实体。你可能会琢磨，剩下的
 * 集合代码在什么地方呢？不用担心，它也会在同一个类中。
 * 只是这些细节对于实际模式来说并不重要，所以我们将其省略了而已。
 */
public class Main {
    public static void main(String[] args) {
        List<College> collegeList = new ArrayList<College>();

        ComputerCollege computerCollege = new ComputerCollege();
        InfoCollege infoCollege = new InfoCollege();

        collegeList.add(computerCollege);
        collegeList.add(infoCollege);

        OutPutImpl outPutImpl = new OutPutImpl(collegeList);
        outPutImpl.printCollege();

    }
}
